﻿
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;


namespace GUI
{

    public partial class HanhKhach : Form
    {
        private string oldMaHK = null;
        private string oldHoTen = null;
        private bool oldGioiTinh;
        private string oldCMND = null;
        private string oldQuocTich = null;
        private string oldPassport = null;
        private string oldDiaChi = null;
        private string oldDienThoai = null;
        private DataGridViewCell oldCell;

        private DataGridViewRow oldRow_ve;
        private Ve_DTO Ticket = new Ve_DTO();
        public HanhKhach()
        {
            InitializeComponent();
        }

        private void HanhKhach_Load(object sender, EventArgs e)
        {
            GridView_TraCuuHK.Rows.Clear();
            GridView_Ve.Rows.Clear();
        }

        private void Button_TraCuu_Click(object sender, EventArgs e)
        {
          //  bool result_ConvertIntoInt = new bool();

            ////Kiểm tra TextBox_HoTenHK có rỗng hay không?
            //if (TextBox_HoTenHK.Text.Trim() == "")
            //    MessageBox.Show("Xin vui lòng bổ sung họ tên hành khách!");

            ////Kiểm tra TextBox_MaHK có rỗng hay không?
            //if (TextBox_MaHK.Text.Trim() == "")
            //    MessageBox.Show("Xin vui lòng bổ sung mã hành khách!");

            ////Kiểm tra TextBox_CMND có rỗng hay không?
            //if (TextBox_CMND.Text.Trim() == "")
            //    MessageBox.Show("Xin vui lòng bổ sung số CMND của hành khách!");

            ////Nếu 3 điều kiện trên thỏa, tiến hành tìm kiếm hành khách
            //if ((TextBox_HoTenHK.Text.Trim() != "") && (TextBox_MaHK.Text.Trim() != "") && (TextBox_CMND.Text.Trim() != ""))
            //{
            //    //Lấy thông tin từ TextBox_HoTenHK
            //    string hoTenHK = TextBox_HoTenHK.Text.Trim();
            //    TextBox_HoTenHK.Text = hoTenHK;

            //    //Lấy thông tin từ TextBox_MaHK
            //    string maHK = TextBox_MaHK.Text.Trim();
            //    TextBox_MaHK.Text = maHK;

            //    //Lấy thông tin từ TextBox_CMND
            //    string cmnd = TextBox_CMND.Text.Trim();
            //    TextBox_CMND.Text = cmnd;

            //    //Tiến hành tìm kiếm hành khách trong cơ sở dữ liệu
            //    List<HanhKhach_DTO> danhSachHanhKhach = new List<HanhKhach_DTO>();
            //    danhSachHanhKhach.Add(HanhKhach_BUS.layHanhKhachTheoMaHK(maHK));
            //    if (danhSachHanhKhach == null)
            //    {
            //        danhSachHanhKhach.Add(HanhKhach_BUS.layHanhKhachTheoCMND(cmnd));
            //        if (danhSachHanhKhach == null)
            //        {
            //            danhSachHanhKhach = HanhKhach_BUS.layHanhKhachTheoHoTen(hoTenHK);
            //        }
            //    }

            //Kiểm tra TextBox_HoTenHK có rỗng hay không?
            if ((TextBox_HoTenHK.Text.Trim() == "") && (TextBox_CMND.Text.Trim() == "") && (TextBox_MaHK.Text.Trim() == ""))
            {
                MessageBox.Show("Xin vui lòng bổ sung thông tin tra cứu");
                return;
            }

            //Nếu 3 điều kiện trên thỏa, tiến hành tìm kiếm hành khách
            if ((TextBox_HoTenHK.Text.Trim() != "") || (TextBox_MaHK.Text.Trim() != "") || (TextBox_CMND.Text.Trim() != ""))
            {
                //Lấy thông tin từ TextBox_HoTenHK
                string hoTenHK = TextBox_HoTenHK.Text.Trim();
                TextBox_HoTenHK.Text = hoTenHK;

                //Lấy thông tin từ TextBox_MaHK
                string maHK = TextBox_MaHK.Text.Trim();
                TextBox_MaHK.Text = maHK;

                //Lấy thông tin từ TextBox_CMND
                string cmnd = TextBox_CMND.Text.Trim();
                TextBox_CMND.Text = cmnd;
 
                //Tiến hành tìm kiếm hành khách trong cơ sở dữ liệu
                //tìm kiếm 1 trong các thông tin được cung cấp, nếu có cả 3 thì chia theo cấp tìm mahk -> cmnd ->hoten
                List<HanhKhach_DTO> danhSachHanhKhach = new List<HanhKhach_DTO>();
                if (string.IsNullOrWhiteSpace(maHK) != true)
                {
                   HanhKhach_DTO temp= HanhKhach_BUS.layHanhKhachTheoMaHK(maHK);
                   if (temp != null)    //tránh trường hợp add vào được nhưng chỉ toàn null
                       danhSachHanhKhach.Add(temp);
                }

                if (danhSachHanhKhach.Count ==0 && string.IsNullOrWhiteSpace(cmnd) != true)
                    {
                        HanhKhach_DTO temp = HanhKhach_BUS.layHanhKhachTheoCMND(cmnd);
                        if (temp != null)
                            danhSachHanhKhach.Add(temp);
                    }
                if (danhSachHanhKhach.Count==0 && string.IsNullOrWhiteSpace(hoTenHK) != true)
                {
                    danhSachHanhKhach = HanhKhach_BUS.layHanhKhachTheoHoTen(hoTenHK);
                }
          
                if (danhSachHanhKhach.Count ==0 || danhSachHanhKhach[0] == null)
                {
                    MessageBox.Show("Không tìm thấy thông tin thỏa yêu cầu");
                    return;
                }
                GridView_TraCuuHK.Rows.Clear();
                for (int i = 0; i < danhSachHanhKhach.Count; i++)
                    GridView_TraCuuHK.Rows.Add(danhSachHanhKhach[i].MaHK, danhSachHanhKhach[i].HoTen,danhSachHanhKhach[i].GioiTinh?"Nam":"Nữ", danhSachHanhKhach[i].CMND, danhSachHanhKhach[i].QuocTich, danhSachHanhKhach[i].Passport, danhSachHanhKhach[i].DiaChi, danhSachHanhKhach[i].DienThoai);
            }
        }

        private void Button_Xoa_Click(object sender, EventArgs e)
        {
            if (GridView_TraCuuHK.CurrentRow != null)
            {
                HanhKhach_DTO hanhKhach = new HanhKhach_DTO();
                //Lấy ra thông tin hành khách muốn xóa 
                string maHK = GridView_TraCuuHK.CurrentRow.Cells["Column_MaHK"].Value.ToString();
                string hoTen = GridView_TraCuuHK.CurrentRow.Cells["Column_HoTen"].Value.ToString();
                bool gioiTinh = GridView_TraCuuHK.CurrentRow.Cells["Column_GioiTinh"].Value.Equals(sender);
                string cmnd = GridView_TraCuuHK.CurrentRow.Cells["Column_CMND"].Value.ToString();
                string quocTich = GridView_TraCuuHK.CurrentRow.Cells["Column_QuocTich"].Value.ToString();
                string passport = GridView_TraCuuHK.CurrentRow.Cells["Column_Passport"].Value.ToString();
                string diaChi = GridView_TraCuuHK.CurrentRow.Cells["Column_DiaChi"].Value.ToString();
                string dienThoai = GridView_TraCuuHK.CurrentRow.Cells["Column_DienThoai"].Value.ToString();

                DialogResult dr = MessageBox.Show("Bạn có chắc là muốn xóa hành khách " + maHK + "?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dr == DialogResult.Yes)
                {
                    hanhKhach.MaHK = maHK;
                    hanhKhach.HoTen = hoTen;
                    hanhKhach.GioiTinh = gioiTinh;
                    hanhKhach.CMND = cmnd;
                    hanhKhach.QuocTich = quocTich;
                    hanhKhach.Passport = passport;
                    hanhKhach.DiaChi = diaChi;
                    hanhKhach.DienThoai = dienThoai;

                    bool result = HanhKhach_BUS.xoaHanhKhach(hanhKhach);
                    if (result == true)
                    {
                        MessageBox.Show("Xóa thành công!", "Delete", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        GridView_TraCuuHK.Update();
                        Application.DoEvents();

                    }
                    else
                        MessageBox.Show("Xóa thất bại! Vui lòng chọn một hành khách khác!", "Delete", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }


        private void GridView_TraCuuHK_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            oldCell = GridView_TraCuuHK.SelectedCells[0];

            oldMaHK = GridView_TraCuuHK.CurrentRow.Cells["Column_MaHK"].Value.ToString();
            oldHoTen = GridView_TraCuuHK.CurrentRow.Cells["Column_HoTen"].Value.ToString();

            if ((GridView_TraCuuHK.CurrentRow.Cells["Column_GioiTinh"].Value.ToString().Trim() == "Nam") || (GridView_TraCuuHK.CurrentRow.Cells["Column_GioiTinh"].Value.ToString().Trim() == "nam"))
                oldGioiTinh = true;
            else
                oldGioiTinh = false;
            oldCMND = GridView_TraCuuHK.CurrentRow.Cells["Column_CMND"].Value.ToString();
            oldQuocTich = GridView_TraCuuHK.CurrentRow.Cells["Column_QuocTich"].Value.ToString();
            oldPassport = GridView_TraCuuHK.CurrentRow.Cells["Column_Passport"].Value.ToString();
            oldDiaChi = GridView_TraCuuHK.CurrentRow.Cells["Column_DiaChi"].Value.ToString();
            oldDienThoai = GridView_TraCuuHK.CurrentRow.Cells["Column_DienThoai"].Value.ToString();
        }

        private void GridView_TraCuuHK_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //string newMaHK = null;
            string newHoTen = null;
            bool newGioiTinh = false;
            string newCMND = null;
            string newQuocTich = null;
            string newPassport = null;
            string newDiaChi = null;
            string newDienThoai = null;
            HanhKhach_DTO tmp = new HanhKhach_DTO();

            //Ô họ tên
            if (oldCell.OwningRow.Cells[1] == null)
            {
                oldCell.OwningRow.Cells[1].Value = oldHoTen;
                newHoTen = oldHoTen;
            }
            else
            {
                newHoTen = oldCell.OwningRow.Cells[1].Value.ToString().Trim();
                oldCell.OwningRow.Cells[1].Value = newHoTen;
            }

            //Ô giới tính
            if (String.Compare(oldCell.OwningRow.Cells[2].Value.ToString().Trim(), "Nam") == 0)
                newGioiTinh = true;
            else
                if (String.Compare(oldCell.OwningRow.Cells[2].Value.ToString().Trim(), "Nữ") == 0)
                    newGioiTinh = false;
                else newGioiTinh = oldGioiTinh;
                //oldCell.OwningRow.Cells[2].Value = newGioiTinh.ToString();
            

            //Ô cmnd
            if (oldCell.OwningRow.Cells[3].Value == null)
            {
                oldCell.OwningRow.Cells[3].Value = oldCMND;
                newCMND = oldCMND;
            }
            else
            {
                newCMND = oldCell.OwningRow.Cells[3].Value.ToString().Trim();
                oldCell.OwningRow.Cells[3].Value = newCMND;
            }

            //Ô Quốc tịch
            if (oldCell.OwningRow.Cells[4].Value == null)
            {
                oldCell.OwningRow.Cells[4].Value = oldQuocTich;
                newQuocTich = oldQuocTich;
            }
            else
            {
                newQuocTich = oldCell.OwningRow.Cells[4].Value.ToString().Trim();
                oldCell.OwningRow.Cells[4].Value = newQuocTich;
            }

            //Ô Passport
            if (oldCell.OwningRow.Cells[5].Value == null)
            {
                oldCell.OwningRow.Cells[5].Value = oldPassport;
                newPassport = oldPassport;
            }
            else
            {
                newPassport = oldCell.OwningRow.Cells[5].Value.ToString().Trim();
                oldCell.OwningRow.Cells[5].Value = newPassport;
            }

            //Ô địa chỉ
            if (oldCell.OwningRow.Cells[6].Value == null)
            {
                oldCell.OwningRow.Cells[6].Value = oldDiaChi;
                newDiaChi = oldDiaChi;
            }
            else
            {
                newDiaChi = oldCell.OwningRow.Cells[6].Value.ToString().Trim();
                oldCell.OwningRow.Cells[6].Value = newDiaChi;
            }

            //Ô điện thoại
            if (oldCell.OwningRow.Cells[7].Value == null)
            {
                oldCell.OwningRow.Cells[7].Value = oldDienThoai;
                newDienThoai = oldDienThoai;
            }
            else
            {
                newDienThoai = oldCell.OwningRow.Cells[7].Value.ToString().Trim();
                oldCell.OwningRow.Cells[7].Value = newDienThoai;
            }

            tmp.MaHK = oldCell.OwningRow.Cells[0].Value.ToString();
            tmp.HoTen = newHoTen;
            tmp.GioiTinh = newGioiTinh;
            tmp.QuocTich = newQuocTich;
            tmp.CMND = newCMND;
            tmp.Passport = newPassport;
            tmp.DiaChi = newDiaChi;
            tmp.DienThoai = newDienThoai;
            HanhKhach_BUS.suaHanhKhach(tmp);
        }

        private void HanhKhach_Load_1(object sender, EventArgs e)
        {

        }

        private void GridView_TraCuuHK_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void GridView_TraCuuHK_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
            string maHK = GridView_TraCuuHK.CurrentRow.Cells["Column_MaHK"].Value.ToString();
            Ve_DTO ve = Ve_BUS.layVeTheoMaHK(maHK);
            if(ve == null)
                return;
            GridView_Ve.Rows.Clear();
            GridView_Ve.Rows.Add(maHK, ve.MaVe, ve.LoaiVe == true ? "Mua" : "Đặt", ve.HangVe == true ? "1" : "2", ve.MaLB, ve.SttGhe, ve.NgayLap, ve.MaNV);
            GridView_Ve.Show();
        }

        private void GridView_TraCuuHK_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        private void GridView_TraCuuHK_SelectionChanged(object sender, EventArgs e)
        {
            string maHK = GridView_TraCuuHK.CurrentRow.Cells["Column_MaHK"].Value.ToString();
            Ve_DTO ve = Ve_BUS.layVeTheoMaHK(maHK);
            if (ve == null)
                return;
            GridView_Ve.Rows.Clear();
            GridView_Ve.Rows.Add(maHK, ve.MaVe, ve.LoaiVe == true ? "Mua" : "Đặt", ve.HangVe == true ? "1" : "2", ve.MaLB, ve.SttGhe, ve.NgayLap, ve.MaNV);
            GridView_Ve.Show();
        }

        private void GridView_Ve_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            //lấy giá trị dòng bị edit
            oldRow_ve = GridView_Ve.SelectedCells[0].OwningRow;
            //gán giá trị cũ của vé
            Ticket = Ve_BUS.layVeTheoMaHK(oldRow_ve.Cells["maHK"].Value.ToString());
        }

        private void GridView_Ve_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            Ve_DTO newTicket = new Ve_DTO();
            //ô hạng vé, nếu giá trị edit k phải null và có thay đổi thì gán lại
            if(string.IsNullOrWhiteSpace(oldRow_ve.Cells["hangVe"].Value.ToString())!=true && string.Compare(oldRow_ve.Cells["hangVe"].Value.ToString().Trim(), (Ticket.HangVe==true ?"1":"2")) !=0)
            {
                Ticket.HangVe = string.Compare(oldRow_ve.Cells["hangVe"].Value.ToString().Trim(),"1") ==0?true :false;
            }

            //ô loại vé
            if(string.IsNullOrWhiteSpace(oldRow_ve.Cells["loaiVe"].Value.ToString())!=true)
                if(string.Compare(oldRow_ve.Cells["loaiVe"].Value.ToString().Trim(), (Ticket.LoaiVe ==true? "Mua":"Đặt"),true)!=0)
            {
                if (string.Compare(oldRow_ve.Cells["loaiVe"].Value.ToString().Trim(), "Mua", true) == 0)
                {
                    Ticket.LoaiVe = true;
                }
                else
                {
                    if (string.Compare(oldRow_ve.Cells["loaiVe"].Value.ToString().Trim(), "Đặt", true) == 0)
                    {
                        Ticket.LoaiVe = false;
                    }
                }
            }

            //ô mã lịch bay
            //xac dinh no co null hay k
            if(string.IsNullOrWhiteSpace(oldRow_ve.Cells["maLB"].Value.ToString()) ==false)
            {
                //ô lịch bay có sự thay đổi k
                if(string.Compare(oldRow_ve.Cells["maLB"].Value.ToString().Trim(), Ticket.MaLB, true)!=0)
                {
                    List<LichBay_DTO> dslb = LichBay_BUS.layDanhSachLichBay();
                    int count  =0;
                    foreach(LichBay_DTO lb in dslb)
                    {
                        if(string.Compare(oldRow_ve.Cells["maLB"].Value.ToString().Trim(), lb.maLB, true)==0)
                            break;
                        count++;
                    }
                    if(count ==dslb.Count)
                    {
                        MessageBox.Show("Mã lịch bay không có trong hệ thống");
                        return;
                    }
                    else
                    {
                        Ticket.MaLB = oldRow_ve.Cells["maLB"].Value.ToString().Trim();
                    }
                }
                
            }
            if (Ve_BUS.suaVe(Ticket) != true)
            {
                MessageBox.Show("Cập nhật thông tin vé không thành công");
            }
            
        }

    }
}
